﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autocentro.Entities;
using System.Data.Objects;


namespace Autocentro.Respository
{
    public class TrabajadorRepository : MasterRepository, ITrabajadorRepository
    {
        public List<TRABAJADOR> GetAllFromTrabajadores()
        {
            var query = from t in context.Trabajador
                        select t;

            ObjectContext.Refresh(RefreshMode.StoreWins,query);
            return query.ToList();
        }

        public List<TRABAJADOR> GEtFromTrabajadoresByCriterio(string criterio)
        {
            var query = from t in context.Trabajador
                        select t;
            
            if (criterio!=null && criterio!=string.Empty)
            {
                query = from t in query
                        where t.Nombres.ToUpper().Contains(criterio.ToUpper()) ||
                        t.apPaterno.ToUpper().Contains(criterio.ToUpper()) ||
                        t.apMatero.ToUpper().Contains(criterio.ToUpper()) ||
                        t.Dni.ToUpper().Contains(criterio.ToUpper())||
                        (t.Nombres.ToUpper() + " " + t.apPaterno.ToUpper()+" "+t.apMatero.ToUpper()).Contains(criterio.ToUpper())
                        //||
                        //(t.apMatero.ToUpper()+" "+t.Nombres.ToUpper()).Contains(criterio.ToUpper())||
                        //(t.apPaterno.ToUpper()+" "+t.Nombres.ToUpper()).Contains(criterio.ToUpper())||
                        //(t.Nombres.ToUpper()+" "+t.apPaterno.ToUpper()).Contains(criterio.ToUpper())
                        
                        select t;
            }

            ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.ToList();
        }

        public TRABAJADOR GetFromTrbajadorBydID(int id)
        {
            return context.Trabajador.Find(id);
        }

        public TRABAJADOR GetTRabajadorByDni(string dni)
        {
            var query = from t in context.Trabajador
                        where t.Dni.Equals(dni)
                        select t;

            ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.FirstOrDefault();
        }

        public void AddTrabajador(TRABAJADOR trabajador)
        {
            context.Trabajador.Add(trabajador);
            context.SaveChanges();
        }

        public void UpdateTrbajador(TRABAJADOR trbajador)
        {
            context.Entry(trbajador.ImagenTrabajador).State = System.Data.EntityState.Modified;
            context.Entry(trbajador).State = System.Data.EntityState.Modified;
            context.SaveChanges();
        }

        public void DeleteTrabajador(int id)
        {
            var existe = context.Trabajador.Find(id);

            if (existe!=null)
            {
                var trabImg = context.ImagenTrabajador.Find(id);
                context.Trabajador.Remove(existe);
                context.ImagenTrabajador.Remove(trabImg);
                context.SaveChanges();
            }
        }

        public bool ExisteDuplicidadTrabajador(string dni, int id)
        {
            var query = from t in context.Trabajador
                        where t.Dni.ToUpper().CompareTo(dni.ToUpper()) == 0 &&
                        t.Id != id
                        select t;

            ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.Any();
        }

        public bool ExisteImagenHash(string hash, int id)
        {
            var query = from t in context.ImagenTrabajador
                        where t.Hash.ToUpper().CompareTo(hash.ToUpper()) == 0
                        && t.tImagenId != id
                        select t;

            ObjectContext.Refresh(RefreshMode.StoreWins, query);
            return query.Any();
        }
    }
}
